单位根反演不会啊怎么搞 $FFT$ 吧,还是了解了单位根反演后才可以搞的好吧……居然有人吐槽我说我学了 $FFT$ 但是不会运用?!,嘤嘤嘤打击有些大……
实际上所谓的单位根反演就是这个东西:
回到题目,我们先考虑正解的简化版—— $n=1$ 的版本,我们先定义 $W=w[1][1]$ 。
现在对于每一个 $t$ 的答案显然为 $\sum_{i=0}^{L}[i\% k=t] W^i (^L_i)$
这个式子显然等于 $\sum_{i=0}^{L}[k|(i-t)] w^i (^L_i)$ 。会发现 $[k|(i-t)]$ 和上面单位根反演的 $[n|d]$ 一样,于是我们尝试将单位根反演的式子带进去。
后面的 $(\omega_k^{j} W+1)^L$ 显然可以预处理,记为 $num_j$ 。
然后发现 $-tj=\binom{t}{2}+\binom{j}{2}-\binom{t+j}{2}$
后面的式子可以用 $FFT$ 加速,但是值域太大这里需要用到 $MTT$ 。现在就有 $40$ 分了,接下来考虑 $n>1$ 的情况。
我们建矩阵,然后会发现 $n>1$ 仅会对 $num_j$ 的计算方式有变化。
我们定义一个 $begin$ 矩阵,该矩阵只有 $(0,x)$ 位置上有值且值为 $1$ ,也就是说这是白兔的起点。那么最后我们需要留下来的也就是矩阵的 $(0,y)$ ,因为只有在第二维为 $y$ 是才会计入答案。
嗯,差不多可以这样写:
1 | begin.c[0][x]=1; |
Code:
1 |
|
本文标题:【题解】[HNOI2019]白兔之舞 单位根反演+MTT luoguP5293
文章作者:Qiuly
发布时间:2019年04月17日 - 00:00
最后更新:2019年04月18日 - 09:53
原始链接:http://qiulyblog.github.io/2019/04/17/[题解]luoguP5293/
许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。